from sklearn.cluster import KMeans
from sklearn.datasets import make_blobs
from sklearn.metrics import silhouette_score
import matplotlib.pyplot as plt

X, y = make_blobs(n_samples=1000, centers=3, random_state=42)

# 可视化数据集
plt.scatter(X[:, 0], X[:, 1])
plt.show()

# 使用K-means算法进行聚类
kmeans = KMeans(n_clusters=3)
y_pred = kmeans.fit_predict(X)

# 可视化聚类结果
plt.scatter(X[:, 0], X[:, 1], c=y_pred)
plt.show()

# 使用轮廓系数评估聚类效果
score = silhouette_score(X, y_pred)
print("轮廓系数：", score)

# 使用肘部法选择最佳的簇的数量
sse = []
for k in range(1, 11):
    kmeans = KMeans(n_clusters=k)
    kmeans.fit(X)
    sse.append(kmeans.inertia_)
plt.plot(range(1, 11), sse)
plt.xlabel("簇的数量")
plt.ylabel("SSE")
plt.show()